package pe.edu.upc.dew.bibliotecaweb.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionForward;
import pe.edu.upc.dew.bibliotecaweb.model.Libro;
import pe.edu.upc.dew.bibliotecaweb.service.LibroService;

/**
 *
 * @author Edu
 * Acción encargada de realizar poblar el bean del libro, y luego de verificar el titulo y/o isbn registra en la base
 * de datos la informacion del libro y sus ejemplares
 */
public class LibroAction extends org.apache.struts.action.Action {
    
    /* forward name="success" path="" */
    private final static String REGISTER = "registerBook";    
    private LibroService libroService;
    
    public LibroAction(){
        this.libroService = new LibroService();
    }
    
    /**
     * Implementa la invocacion a los metodos necesarios para realizar el registro de libro.
     * Si el proceso de validacion del titulo y/o isbn del libro es satisfactorio, se procede a registrar el libro y sus ejemplares 
     * Caso contrato, se envia un mensaje indicando la existencia de datos similares     
     * @param mapping   permite realizar los redireccionamientos, en base a la asociación y configuración hecha en el archivo struts-config.xml.
     * @param form      permite acceder a los campos de la pagina de registro de libros.
     * @param request   trae el request generado al realizar el submit desde la pagina de registro de libros.
     * @return
     */
    @Override
    public ActionForward execute(ActionMapping mapping, ActionForm  form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        
        LibroForm datosForm = (LibroForm) form;                
            
        //Creamos una instancia del libro a registrar
        Libro libro = new Libro();
        
        //Poblamos los datos de la entidad
        libro.setTituloLibro(datosForm.getTitulo());
        libro.setTemaLibro(datosForm.getTema());
        libro.setCodigoIsbn(datosForm.getCodigoIsbn());
        libro.setNombreEditorial(datosForm.getNombreEditorial());
        libro.setAnioPublicacion(datosForm.getAnioPublicacion());
        libro.setNombreAutor(datosForm.getNombreAutor());            
        libro.setNumEjem(datosForm.getNumeroEjemplares());

        //Verificacion si existe un libro con los mismos datos
        if (libroService.existeLibro(libro)){
            datosForm.setMensajeL("El titulo y/o codigo ISBN ya existen");   
        }   else {                
            //En caso los datos esten correctos, se procede a registrar la informacion del libro
            libroService.addLibro(libro);                                
            datosForm.setMensajeL("Se registro el libro y sus ejemplares satisfactoriamente");   
        }                                    
        
        return mapping.findForward(REGISTER);
        
    }
}